博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
上传图片并实现本地预览(1)
阅读量:5103 次
发布时间:2019-06-13

本文共 5874 字,大约阅读时间需要 19 分钟。

该版本是带有css样式的实现效果,属于初步整理。

纯js实现效果请看上传图片并实现本地预览(2)。
这两篇文档的区别在于:兼容IE时,本文的滤镜css样式写在css样式中。

效果预览

530002-20161018153904451-1539224877.png

html

    
本地上传图片并实现预览
上传图片

css样式

用css实现上传按钮的美化,这个我就随便写了写,比较丑

.upload-wrap{    overflow: hidden;}.upload-box{    position: relative;    width: 106px;    height: 106px;    border:1px solid #e1e1e9;    overflow: hidden;    float: left;    margin: 10px;}.upload-span{    display: block;    width: 100%;    height: 100%;    line-height: 100px;    font-size: 20px;    color: #fff;    background: green;    text-align: center;    position: absolute;    left: 0;    top: 0;    z-index: 5;}.upload-btn{    display: block;    width: 100%;    height: 100%;    position: absolute;    left: 0;    right: 0;    font-size:90px;    z-index: 10;    opacity: 0;    filter:Alpha(opacity=0);}.close-btn{    display: block;    width: 17px;    height: 17px;    position: absolute;    background: url(../img/close.gif);    right: -1px;    top: -1px;    z-index: 100;    cursor: pointer;}.preview-img-box{    width: 100px;    height: 100px;    padding: 3px;    position: absolute;    top: 0;    left: 0;    z-index: 15;    background: #fff;    display: none;}.preview-img-box img{    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);}

该句样式一定要有。如果没有此句,js会报错。

.preview-img-box img{    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);}

没有此句css样式,上传图片效果如下图:

530002-20161018153942232-1303137157.png

    

报错:

530002-20161018153953638-2120370206.png


js

IE10以上才支持FileReader();针对IE7~IE9使用滤镜的方式实现图片预览。由于accept属性IE9及以下浏览器不兼容,因此在上传图片时对文件后缀名进行验证。

$(function(){    $(document).on('change','.upload-btn',function(){        var _this = $(this);        var imgbox = _this.siblings('.preview-img-box');        var maxWidth = imgbox.width();        var maxHeight = imgbox.height();        //IE浏览器,使用滤镜        if(navigator.userAgent.indexOf("MSIE")>0){            if(navigator.userAgent.indexOf("MSIE 7.0")>0 || navigator.userAgent.indexOf("MSIE 8.0")>0 || navigator.userAgent.indexOf("MSIE 9.0")>0){                var sFilter='filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="';                 _this.select();                var imgsrc = document.selection.createRange().text;                var imgreg = /\.jpg$|\.jpeg$|\.gif$|\.png$/i;                if(imgreg.test(imgsrc)){                    imgbox.show();                    imgbox.html('');                    var img = document.getElementById("PreviewImg");                    img.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgsrc;                    var rect = clacImgZoomParam(maxWidth, maxHeight, img.offsetWidth, img.offsetHeight);                    status = ('rect:'+rect.top+','+rect.left+','+rect.width+','+rect.height);                    var odiv = "
"; imgbox.html(odiv); document.selection.empty(); var upload_box = '
' +'
上传图片' +'
' +'
'; $(upload_box).appendTo($('.upload-wrap')); } else{ alert('图片类型必须是.gif,jpeg,jpg,png中的一种!') } } } else{ var ofile = _this.prop('files')[0] || _this.files[0]; if(ofile){ if(window.FileReader){ var fr = new FileReader(); fr.onloadend = function(e){ var imgbox = _this.siblings('.preview-img-box'); imgbox.show(); console.log(e.target.result); var oimg = ''; $(oimg).appendTo(imgbox); var Img = imgbox.find('.preview-img'); var rect = clacImgZoomParam(maxWidth, maxHeight, Img.width(), Img.height()); Img.css({ "display":"block", "width":rect.width, "height":rect.height, "margin-top":rect.top, "margin-left":rect.left }) } fr.readAsDataURL(ofile); } var upload_box = '
' +'
上传图片' +'
' +'
'; $(upload_box).appendTo($('.upload-wrap')); } } }) //删除功能 $(document).on('click','.close-btn',function(){ var oindex = $(this).parents('.upload-box').index(); if(oindex == 0){ $(this).siblings('.preview-img-box').html(''); $(this).siblings('.preview-img-box').hide(); $(this).siblings('.upload-btn').val(''); $(this).siblings('.upload-btn').show(); $(this).siblings('.upload-span').show(); } else{ $(this).parents('.upload-box').remove(); } })})function clacImgZoomParam( maxWidth, maxHeight, width, height ){ var param = {top:0, left:0, width:width, height:height}; if( width>maxWidth || height>maxHeight ) { rateWidth = width / maxWidth; rateHeight = height / maxHeight; if( rateWidth > rateHeight ) { param.width = maxWidth; param.height = Math.round(height / rateWidth); }else { param.width = Math.round(width / rateHeight); param.height = maxHeight; } } param.left = Math.round((maxWidth - param.width) / 2); param.top = Math.round((maxHeight - param.height) / 2); return param; }

转载于:https://www.cnblogs.com/fanyx/p/5973562.html

你可能感兴趣的文章
Go之数组
查看>>
Sharepoint学习笔记 –架构系列—Sharepoint的服务器端对象模型(Server Object Model) 3.服务层次结构...
查看>>
将SQL中字段值为null的记录在GridView中显示为"0"
查看>>
[转] 深刻理解Python中的元类(metaclass)
查看>>
CommonJS基础1
查看>>
c++三种进制格式
查看>>
Qt Charts——QChartsView
查看>>
如何处理大量数据并发操作(转)
查看>>
JavaScript实现强制重定向至HTTPS页面
查看>>
2019年2月备战春招最新大数据+Java岗位+人工智能岗位资料免费送【限时领取】...
查看>>
.NET设计模式简析
查看>>
SQL高效率语句(二)
查看>>
web优化之-js动态合并 动态压缩 去掉js重复引用 js缓存 js延迟加载
查看>>
201704221048_《ES6模板字符串》
查看>>
【BZOJ-2595】游览计划 斯坦纳树
查看>>
Ubuntu——配置JDK
查看>>
导弹拦截版
查看>>
jzoj5195. 【NOIP2017提高组模拟7.3】A(递推,打表)
查看>>
robot framework接口测试之一-完整的测试用例
查看>>
IOS开发:使用lipo合并armv7,i386,armv7s库文件
查看>>